using System;
using System.Collections.Generic;
using TestClassesForConcepts;
using TestClassesForConcepts.Sample1;

concept C1[T] 
{
    using AT1 = A<MyS, T>;
    require A == A;
    //require A == B;
    //require AT1 == C<KeyA>;
    require A<MyS, MyT> == A<MyS, MyT>;
    require AT1 == A<MyS, MyT>;
}

concept C2[T, S, U] 
{
    type A1;
    type A1_1;
    //require A1 == C<A1>;
    //require A1_1 == A< B<A1_1, KeyA>, A1 >;
    type A2 == B;
    require A<A1, A2> == A< C<T>, A1_1 >;
    //using B1 = S;
    //using B1 = A1; 
    require A1 == C<MyQ>;
}

concept C3[T, S, U, V] 
{
    type A1;
    require B<A1, C<T>> <: B<A1, S>;
    type B1;
    type B2;
    require C<V> <: A<B1, B2>;
}